<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Device extends MY_Controller {

    public function __construct() {
        parent::__construct();
        $this->checkLogin();
        $this->data['controller'] = 'device';
        $this->load->model('Mdevice');
        
    }

    public function getmap() {
        die(json_encode($this->Mdevice->getMapdata()));
    }

    public function getStatisticDeviceAjax() {
        $this->data['statistic'] = $this->Mdevice->getStatisticDeviceAjaxDB($this->getParamString('id'));
        $this->load->view('temp/device/' . strtolower(__FUNCTION__), $this->data);
    }

    public function resetdeviceajax() {
        die($this->Mdevice->resetdeviceajaxDB($this->getParamString('id')));
    }

    public function addnotedeviceajax() {
        die($this->Mdevice->addnotedeviceajaxDB($this->getParamString('id'), $this->getParamString('content')));
    }

    public function gethistorydeviceajax() {
        $this->data['ids'] = $this->getParamString('id');
        $this->data['data'] = $this->Mdevice->gethistorydeviceajaxDB($this->data['ids']);
        $this->load->view('temp/device/' . __FUNCTION__, $this->data);
    }

    public function getformeditdevice() {
        $this->data['data'] = $this->Mdevice->getDataDeviceEdit($this->getParamString('id'));
        $this->load->view('temp/device/' . __FUNCTION__, $this->data);
    }

    public function index() {
        $this->checkLogin();
        
        $this->data['type'] = $this->getParamString('type');
        $this->data['id'] = $this->getParamInt('id');

        
        // bd phan trang cho list.
        $this->load->library('pagination');
        $config['per_page'] = $this->data['_per_page'] = 50;
        $this->data['page'] = $this->data['page_current'] = $this->getParamUri(2, 1);
        $offset = (($this->getParamUri(2, 1) - 1) * $config['per_page']) > 0 ? (($this->getParamUri(2, 1) - 1) * $config['per_page']) : 0;
        $data = $this->Mdevice->getDevice($config['per_page'], $offset);
        $config['base_url'] = base_url($this->uri->segment(1) . '/');
        $config['total_rows'] = $this->data['sumDevice'] = $data['count'];
        $config['uri_segment'] = 2;
        $config['uri_segment_page'] = $this->getParamUri(2, 1);
        $config['suffix'] = '.html';
        $config['use_page_numbers'] = TRUE;
        $this->pagination->initialize($config);
        $this->data['data'] = $data['data'];

        $this->load->model('Mcustomer');
        $this->data['networkgroup'] = $this->Mcustomer->getNetWorkGroup();
        // h phan trang cho list.
        //$this->data['place'] = $this->Mdevice->getPlaceSelect();
        $this->data['action'] = __FUNCTION__;
        $this->load->view('temp/layout', $this->data);
    }

    public function adddevice() {
        $this->checkAdminSystemGroup();
        $this->load->library('form_validation');
        $this->form_validation->set_rules('namedevice', 'Tên thiết bị', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('mac', 'Mac thiết bị', 'required|is_unique[tbl_device.mac]', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
            'is_unique' => '<label>&nbsp;</label><span>%s đã tồn tại, vui lòng chọn tên khác.</span>'
        ));
        $this->form_validation->set_rules('nasid', 'NasID thiết bị', 'required|is_unique[tbl_device.nasid]', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
            'is_unique' => '<label>&nbsp;</label><span>%s đã tồn tại, vui lòng chọn tên khác.</span>'
        ));
        $this->form_validation->set_rules('version', 'Version hotspot', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('network_group', 'Nhóm mạng', 'required|is_natural_no_zero', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
            'is_natural_no_zero' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('place', 'Địa chỉ thiết bị', 'required|is_natural_no_zero', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
            'is_natural_no_zero' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));

        $this->form_validation->set_rules('HS_DEFSESSIONTIMEOUT', 'DEFSESSIONTIMEOUT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_DEFIDLETIMEOUT', 'DEFIDLETIMEOUT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_UAMFORMAT', 'UAMFORMAT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_UAMHOMEPAGE', 'UAMHOMEPAGE', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));

        if ($this->form_validation->run() === TRUE) {
                $fileUpload = null;
                
                if ($_FILES['fileconfig']['name'] != null) {
                    $upload = $this->uploadFile();
                    if ($upload['status'] == 201) {
                        $this->data['error'] = 'Upload file thất bại.';
                    } else {
                        $fileUpload = $upload['data'];
                    }
                }

                $run = $this->Mdevice->saveDevice($fileUpload);
                if (!$run) {
                    $this->data['error'] = 'Địa chỉ đã tồn tại.';
                } else {
                    $this->data['status'] = 'Thêm thành công.';
                }
        }

        $this->data['networkgroup'] = $this->Mdevice->getNetWorkGroup();
        $this->data['place'] = $this->Mdevice->getPlaceSelect();
        $this->data['action'] = __FUNCTION__;
        $this->load->view('temp/layout', $this->data);
    }

    public function deletedevice() {
        $this->checkAdminSystemGroup();
        $this->checkPermissionDevice($this->getParamString('id'),1);
        $this->Mdevice->deleteDeviceDB($this->getParamString('id'));
        //redirect(site_url().'device');
    }

    public function editdevice() {
        
        $this->data['id'] = $this->getParamString('id');
        
        $this->checkPermissionDevice($this->data['id'],1);
        
        $this->data['data'] = $this->Mdevice->getDataDeviceEdit($this->data['id']);
        $this->data['submit'] = $this->getParamString('submit');
        
        $this->load->library('form_validation');
        $this->form_validation->set_rules('namedevice', 'Tên thiết bị', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('version', 'Version hotspot', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        
        if($this->session->userdata('level') != 3)
        {
            $this->form_validation->set_rules('network_group', 'Nhóm mạng', 'required|is_natural_no_zero', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
            'is_natural_no_zero' => '<label>&nbsp;</label><span>%s không được để trống</span>'
            ));
            $this->form_validation->set_rules('place', 'Địa chỉ thiết bị', 'required|is_natural_no_zero', array(
                'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
                'is_natural_no_zero' => '<label>&nbsp;</label><span>%s không được để trống</span>'
            ));
        }
        
        $this->form_validation->set_rules('HS_DEFSESSIONTIMEOUT', 'DEFSESSIONTIMEOUT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_DEFIDLETIMEOUT', 'DEFIDLETIMEOUT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_UAMFORMAT', 'UAMFORMAT', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));
        $this->form_validation->set_rules('HS_UAMHOMEPAGE', 'UAMHOMEPAGE', 'required', array(
            'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
        ));

        $checkMacNas = $this->Mdevice->checkIsUniqueMacNasid($this->getParamString('mac'), $this->getParamString('nasid'), $this->data['id']);
        if ($checkMacNas['mac']) {
            $this->form_validation->set_rules('mac', 'Mac thiết bị', 'required', array(
                'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
            ));
        } else {
            $this->form_validation->set_rules('mac', 'Mac thiết bị', 'required|is_unique[tbl_device.mac]', array(
                'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
                'is_unique' => '<label>&nbsp;</label><span>%s đã tồn tại, vui lòng chọn tên khác.</span>'
            ));
        }

        if ($checkMacNas['nasid']) {
            $this->form_validation->set_rules('nasid', 'NasID thiết bị', 'required', array(
                'required' => '<label>&nbsp;</label><span>%s không được để trống</span>'
            ));
        } else {
            $this->form_validation->set_rules('nasid', 'NasID thiết bị', 'required|is_unique[tbl_device.nasid]', array(
                'required' => '<label>&nbsp;</label><span>%s không được để trống</span>',
                'is_unique' => '<label>&nbsp;</label><span>%s đã tồn tại, vui lòng chọn tên khác.</span>'
            ));
        }

        if ($this->form_validation->run() === TRUE) {
                $fileUpload = null;
                if ($_FILES['fileconfig'] != null) {
                    if ($_FILES['fileconfig']['size'] > 0) {
                        $upload = $this->uploadFile();
                        if ($upload['status'] == 201) {
                            $this->data['error'] = 'Upload file thất bại.';
                        } else {
                            $fileUpload = $upload['data'];
                        }
                    }
                }

                $run = $this->Mdevice->editDevice($this->data['id'], $fileUpload);
                if (!$run) {
                    $this->data['error'] = 'Địa chỉ đã tồn tại.';
                } else {
                    $this->data['status'] = 'Cập nhật thành công.';
                }
        }

        $this->data['networkgroup'] = $this->Mdevice->getNetWorkGroup($this->data['id']);
        $this->data['place'] = $this->Mdevice->getPlaceSelect();

        $this->data['action'] = __FUNCTION__;
        $this->load->view('temp/layout', $this->data);
    }

    private function checkZero($str) {
        if ($str < 1) {
            return true;
        } else {
            return false;
        }
    }

    public function getDistrict() {
        die($this->data['fview']->selectOption($this->getDistrictData($this->getParamInt('id')), '', 'form-control', 'district', 'district'));
    }

    public function updatestatus() {
        die();
    }

    public function warning() {
        die($this->Mdevice->warningSystemDB());
    }

    private function uploadFile() {
        $config = array(
            'upload_path' => PROJECT_PATH . "/public/",
            'allowed_types' => "zip",
            'encrypt_name' => true,
            'max_size' => "20480000"
        );

        $this->load->library('upload', $config);


        if (!$this->upload->do_upload('fileconfig')) {
            return array('status' => 201, 'data' => null);
        } else {
            $dataFile = $this->upload->data();
            return array('status' => 200, 'data' => $dataFile['file_name']);
        }
    }

    public function checkupdate() {
        $this->Mdevice->updatestatusDB();
        die($this->Mdevice->checkupdateDB($this->getParamString('id')));
    }

    public function getReport() {
        $this->data['data'] = $this->Mdevice->getReportDb();

        $this->data['action'] = 'report';
        $this->load->view('temp/index/report', $this->data);
    }

    public function indexgetdistrict() {
        die($this->Mdevice->indexgetdistrict($this->getParamInt('province')));
    }

    public function indexlistdistrict() {
        die($this->Mdevice->indexlistdistrict($this->getParamInt('province'), $this->getParamInt('district')));
    }

    public function devicedetail() {
        $id = $this->getParamUri(2, 1);
        if (in_array($id, array('', null))) {
            redirect('');
        }
        $this->data['id'] = $id;
        $this->load->library('form_validation');
        $this->form_validation->set_rules('content', 'Nội dung ghi chú', 'required');
        if ($this->form_validation->run() === TRUE) {
            $content = $this->getParamString('content');
            $run = $this->Mdevice->addCommentDb($id, $content);
            if ($run == 200) {
                redirect('device-detail/' . $id);
            } else {
                redirect('device-detail/' . $id);
            }
        }

        $this->data['devicedetail'] = $this->Mdevice->devicedetail($id);
        $this->data['action'] = __FUNCTION__;
        $this->load->view('temp/layout', $this->data);
    }

    public function ajaxupdatecomment() {
        die(json_encode($this->Mdevice->ajaxupdatecomment()));
    }

}
